/*
移动零

给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
请注意 ，必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:

输入: nums = [0]
输出: [0]
*/

//思路：统计0的个数，然后把0从数组中删除，最后在数组后面补0
// nums = [0, 1, 0, 3, 12]
// var moveZeroes = function (nums) {
//     let count = nums.filter((item) => item === 0).length;
//     let order;
//     for (let i = 0; i < count; i++) {
//         order = nums.indexOf(0);
//         nums.splice(order, 1);
//     }
//     for (let i = 0; i < count; i++) {
//         nums.push(0);
//     }
//     return nums;
// };
// console.log(moveZeroes(nums));

//双指针思路：让右指针指向遇到的第一个非0，让左指针指向遇到的第一个0，然后交换，
//在这个过程中，除了一开始两者同时移动，遇到第一个0交换后，左边指针每次移动后都是指向0
nums = [0, 1, 0, 3, 12]
var moveZeroes = function (nums) {
    let left = 0;
    let right = 0;
    let temp;
    while (right < nums.length) {
        if (nums[right] != 0) {
            temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
            left++;
        }
        right++;
    }
    return nums;
};
console.log(moveZeroes(nums));